/* Copyright 2018 SiFive, Inc */
/* SPDX-License-Identifier: Apache-2.0 */

#include <metal/machine.h>
#include <metal/shutdown.h>

extern __inline__ void __metal_shutdown_exit(const struct __metal_shutdown *sd,
                                             int code);

#if defined(__METAL_DT_SHUTDOWN_HANDLE)
void metal_shutdown(int code) {
    __metal_shutdown_exit(__METAL_DT_SHUTDOWN_HANDLE, code);
}
#else
#pragma message(                                                               \
    "There is no defined shutdown mechanism, metal_shutdown() will spin.")
void metal_shutdown(int code) {
    while (1) {
        __asm__ volatile("nop");
    }
}
#endif
